package service

import (
	"context"
	"devops-super/api"
	"devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// ISysConfig 系统配置服务接口
type ISysConfig interface {
	// GetPageLst 分页获取系统配置列表
	GetPageLst(ctx context.Context, req *v1.SysConfigGetPageLstReq) (out *api.PageLstRes[*entity.SysConfig], err error)
	// Add 新增系统配置
	Add(ctx context.Context, in *entity.SysConfig) (err error)
	// Upt 更新系统配置
	Upt(ctx context.Context, in *entity.SysConfig) (err error)
	// Del 删除系统配置
	Del(ctx context.Context, id int) (err error)
	// GetOne 获取单条系统配置
	GetOne(ctx context.Context, id int) (out *entity.SysConfig, err error)
	// GetOptions 获取系统配置选项
	GetOptions(ctx context.Context, req *v1.SysConfigGetOptionsReq) (out *v1.SysConfigGetOptionsRes, err error)
	// GetGroupConfigs 获取配置组
	GetGroupConfigs(ctx context.Context, in *v1.GetSysGroupConfigsReq) (out *v1.GetSysGroupConfigsRes, err error)
	// SetGroupConfigs 保存配置组
	SetGroupConfigs(ctx context.Context, in *v1.SetSysGroupConfigsReq) (err error)
	GetConfigByKey(ctx context.Context, groupName string, configKey string) (value string, err error)
}

var (
	localSysConfig ISysConfig
)

// SysConfig 获取系统配置服务实例
func SysConfig() ISysConfig {
	if localSysConfig == nil {
		panic("implement not found for interface ISysConfig, forgot register?")
	}
	return localSysConfig
}

// RegisterSysConfig 注册系统配置服务实例
func RegisterSysConfig(i ISysConfig) {
	localSysConfig = i
}
